package org.aman.generator.util;

import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;

import javax.tools.DiagnosticCollector;
import javax.tools.JavaCompiler;
import javax.tools.JavaCompiler.CompilationTask;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;

/**
 * @desc <p></p>
 * @author DaiJiangGuo
 * @date 2015年5月15日下午3:28:25
 */
public class JavaCompilerUtil {


    /**
     *
     * @author DaiJiangGuo
     * @data 2015年5月15日 下午3:37:15
     * @param targetFile
     * @return
     */
    public static boolean compile(File targetFile) {
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
        StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
        List<File> listFiles = new ArrayList<File>();
        listFiles.add(targetFile);
        Iterable<? extends JavaFileObject> jFiles = fileManager.getJavaFileObjectsFromFiles(listFiles);
        CompilationTask task = compiler.getTask(null, fileManager, diagnostics, null, null, jFiles);
        Boolean success = task.call();
        return success;
    }

    /**
     *
     * @author DaiJiangGuo
     * @data 2015年5月15日 下午3:38:45
     * @param classpath
     * @param type
     * @return
     */
    public static Class<?> loadClass(String classpath, String type){
        try {
            URLClassLoader ucl = new URLClassLoader(new URL[] { new File(classpath).toURI().toURL() }, Thread
                    .currentThread().getContextClassLoader());
            Class<?> anser = ucl.loadClass(type);
            ucl.close();
            return anser;
        } catch (Exception e) {
            return null;
        }
    }
}
